// #include "sort.h"

// void test_all(void (*func)(int *, int)) {
//     int arr[] = {1, 9, 7, 5, 5, 0, 4, 8, 2, 6, 3, 2, 1};
//     int n = sizeof(arr) / sizeof(*arr);
//     func(arr, n);
//     FOR(i, n, "%d", arr[i]);
// }

// void bubble_sort_1_test() {
//     int arr[] = {1, 9, 7, 5, 5, 0, 4, 8, 2, 6, 3, 2, 1};
//     int n = sizeof(arr) / sizeof(*arr);
//     printf("before : ");
//     FOR(i, n, "%d", arr[i]);
//     bubble_sort_1(arr, n);
//     printf("after  : ");
//     FOR(i, n, "%d", arr[i]);
// }

// void bubble_sort_2_test() {
//     int arr[] = {1, 9, 7, 5, 5, 0, 4, 8, 2, 6, 3, 2, 1};
//     int n = sizeof(arr) / sizeof(*arr);
//     printf("before : ");
//     FOR(i, n, "%d", arr[i]);
//     bubble_sort_2(arr, n);
//     printf("after  : ");
//     FOR(i, n, "%d", arr[i]);
// }

// void select_sort_1_test() {
//     int arr[] = {1, 9, 7, 5, 5, 0, 4, 8, 2, 6, 3, 2, 1};
//     int n = sizeof(arr) / sizeof(*arr);
//     printf("before : ");
//     FOR(i, n, "%d", arr[i]);
//     select_sort_1(arr, n);
//     printf("after  : ");
//     FOR(i, n, "%d", arr[i]);
// }

// void select_sort_2_test() {
//     int arr[] = {1, 9, 7, 5, 5, 0, 4, 8, 2, 6, 3, 2, 1};
//     int n = sizeof(arr) / sizeof(*arr);
//     printf("before : ");
//     FOR(i, n, "%d", arr[i]);
//     select_sort_2(arr, n);
//     printf("after  : ");
//     FOR(i, n, "%d", arr[i]);
// }

// void insert_sort_test() {
//     int arr[] = {1, 9, 7, 5, 5, 0, 4, 8, 2, 6, 3, 2, 1};
//     int n = sizeof(arr) / sizeof(*arr);
//     printf("before : ");
//     FOR(i, n, "%d", arr[i]);
//     insert_sort(arr, n);
//     printf("after  : ");
//     FOR(i, n, "%d", arr[i]);
// }

// void shell_sort_test() {
//     int arr[] = {1, 9, 7, 5, 5, 0, 4, 8, 2, 6, 3, 2, 1};
//     int n = sizeof(arr) / sizeof(*arr);
//     printf("before : ");
//     FOR(i, n, "%d", arr[i]);
//     shell_sort(arr, n);
//     printf("after  : ");
//     FOR(i, n, "%d", arr[i]);
// }

// // 定义一个宏，用于存储函数指针和名称
// #define TEST_ENTRY(func) {#func, func}

// // 定义一个结构体，存储函数名和函数指针
// typedef struct {
//     // name只是指向字符串字面量的指针，所以不用动态分配内存
//     // 字符串字面量在编译时就被存储在只读数据段中
//     const char *name;
//     void (*func)();
// } TestEntry;

// void (*test_alls[])() = {bubble_sort_1_test, bubble_sort_2_test,
//                          select_sort_1_test, select_sort_2_test,
//                          insert_sort_test,   shell_sort_test};

// int main() {
//     // 使用宏初始化测试数组
//     TestEntry tests[] = {
//         TEST_ENTRY(bubble_sort_1_test), TEST_ENTRY(bubble_sort_2_test),
//         TEST_ENTRY(select_sort_1_test), TEST_ENTRY(select_sort_2_test),
//         TEST_ENTRY(insert_sort_test),   TEST_ENTRY(shell_sort_test)};

//     int n = sizeof(tests) / sizeof(tests[0]);
//     for (int i = 0; i < n; i++) {
//         printf("==============%s===============\n", tests[i].name);
//         // tests[i].func();  // 调用测试函数法1
//         test_all(test_alls[i]);  // 调用测试函数法2
//     }
//     return 0;
// }